/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function(digits) {
  if(digits.length === 0)
    return [];
  let res = [], tempArr = [];

  // 将数字字符，转化成字母
  function numToAlpha(num) {
    switch(num) {
      case '2':
        return ['a', 'b', 'c'];
      case '3':
        return ['d', 'e', 'f'];
      case '4':
        return ['g', 'h', 'i'];
      case '5':
        return ['j', 'k', 'l'];
      case '6':
        return ['m', 'n', 'o'];
      case '7':
        return ['p', 'q', 'r', 's'];
      case '8':
        return ['t', 'u', 'v'];
      case '9':
        return ['w', 'x', 'y', 'z'];
    }
  }
  function dfs(depth) {
    // 当深度和digits相同的时候，说明已经ok了
    if(depth == digits.length) {
      res.push(tempArr.join(''));
      return;
    }
    // 拿到数字对应的字母数组
    const alphaArr = numToAlpha(digits[depth]);
    for(let i = 0; i < alphaArr.length; i++) {
      // 加入临时的数组当中
      tempArr.push(alphaArr[i]);
      // 进行下一级的遍历
      dfs(depth + 1);
      // 此时需要将当前的这个字母给剔除，以便下一次的循环遍历
      tempArr.splice(tempArr.length - 1, 1);
    }
  }
  dfs(0);
  return res;
};
let digits = "23";
console.log(letterCombinations(digits));
digits = "";
console.log(letterCombinations(digits));
digits = "2";
console.log(letterCombinations(digits));
